# 主控流程伪代码
# 1. 等待唤醒（Snowboy）
# 2. 唤醒后录音，录音结束后调用Whisper ASR
# 3. ASR结果发送给Deepseek LLM
# 4. LLM结果通过WebSocket推送到前端

import threading
import time

# 假设各模块有如下接口
from wakeup.snowboy_wakeup import wait_for_wakeup
from asr.whisper_asr import record_and_transcribe
from llm.deepseek_api import ask_llm
from frontend.ws_push import push_to_frontend

def on_wakeup():
    """
    唤醒后进入多轮对话，直到检测到结束唤醒词。
    """
    print("唤醒成功，进入多轮对话模式（说'结束对话'可退出）...")
    while True:
        # 自动录音并识别
        asr_text = record_and_transcribe()
        print(f"ASR识别结果: {asr_text}")
        if not asr_text.strip():
            print("未识别到有效语音，继续等待...")
            continue
        # 检查是否说了结束唤醒词
        if '结束对话' in asr_text or '退出对话' in asr_text:
            print("检测到结束唤醒词，退出多轮对话模式。")
            push_to_frontend("[对话已结束]")
            break
        # 调用LLM获取回复
        llm_result = ask_llm(asr_text)
        print(f"LLM回复: {llm_result}")
        # 推送到前端展示
        push_to_frontend(llm_result)

if __name__ == "__main__":
    # 主循环，等待唤醒
    while True:
        print("等待唤醒...")
        wait_for_wakeup(callback=on_wakeup) 